home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / DEMON / RISCOS2 / ARCKA9Q1.ARC / h / LAPB < prev    next >
Text File  |  1992-03-17  |  5KB  |  116 lines

  1. /* Upper sub-layer (LAPB) definitions */
  2.  
  3. /* Control field templates */
  4. #define I       0x00    /* Information frames */
  5. #define S       0x01    /* Supervisory frames */
  6. #define RR      0x01    /* Receiver ready */
  7. #define RNR     0x05    /* Receiver not ready */
  8. #define REJ     0x09    /* Reject */
  9. #define U       0x03    /* Unnumbered frames */
  10. #define SABM    0x2f    /* Set Asynchronous Balanced Mode */
  11. #define DISC    0x43    /* Disconnect */
  12. #define DM      0x0f    /* Disconnected mode */
  13. #define UA      0x63    /* Unnumbered acknowledge */
  14. #define FRMR    0x87    /* Frame reject */
  15. #define UI      0x03    /* Unnumbered information */
  16. #define PF      0x10    /* Poll/final bit */
  17.  
  18. #define MMASK   7       /* Mask for modulo-8 sequence numbers */
  19.  
  20. /* FRMR reason bits */
  21. #define W       1       /* Invalid control field */
  22. #define X       2       /* Unallowed I-field */
  23. #define Y       4       /* Too-long I-field */
  24. #define Z       8       /* Invalid sequence number */
  25.  
  26. /* Per-connection link control block
  27.  * These are created and destroyed dynamically,
  28.  * and are indexed through a hash table.
  29.  * One exists for each logical AX.25 Level 2 connection
  30.  */
  31. struct ax25_cb {
  32.         struct ax25_cb *next;           /* Doubly linked list pointers */
  33.         struct ax25_cb *prev;
  34.  
  35.         struct mbuf *txq;               /* Transmit queue */
  36.  
  37.         struct mbuf *rxasm;             /* Receive reassembly buffer */
  38.         struct mbuf *rxq;               /* Receive queue */
  39.  
  40.         struct ax25 addr;               /* Address header */
  41.  
  42.         struct interface *interface;    /* Associated interface */
  43.  
  44.         char rejsent;                   /* REJ frame has been sent */
  45.         char remotebusy;                /* Remote sent RNR */
  46.         char response;                  /* Response owed to other end */
  47.  
  48.         char vs;                        /* Our send state variable */
  49.         char vr;                        /* Our receive state variable */
  50.         char unack;                     /* Number of unacked frames */
  51.         int maxframe;                   /* Transmit flow control level */
  52.         int16 paclen;                   /* Maximum outbound packet size */
  53.         int16 window;                   /* Local flow control limit */
  54.         char proto;                     /* Protocol version */
  55. #define V1      1                       /* AX.25 Version 1 */
  56. #define V2      2                       /* AX.25 Version 2 */
  57.         int16   pthresh;                /* Poll threshold */
  58.         unsigned retries;               /* Retry counter */
  59.         unsigned n2;                    /* Retry limit */
  60.         int state;                      /* Link state */
  61. #define DISCONNECTED    0
  62. #define SETUP           1
  63. #define DISCPENDING     2
  64. #define CONNECTED       3
  65. #define RECOVERY        4
  66. #define FRAMEREJECT     5
  67.         char frmrinfo[3];               /* I-field for FRMR message */
  68.         struct timer t1;                /* Retry timer */
  69.         struct timer t2;                /* Acknowledgement delay timer */
  70.         struct timer t3;                /* Keep-alive poll timer */
  71.         struct timer t4;                /* Link redundancy timer */
  72.  
  73.         void (*r_upcall)();             /* Receiver upcall */
  74.         void (*t_upcall)();             /* Transmit upcall */
  75.         void (*s_upcall)();             /* State change upcall */
  76.         char *user;                     /* User pointer */
  77.         int  segremain;
  78.         char segpid;
  79. };
  80. #define NULLAX25        ((struct ax25_cb *)0)
  81. extern struct ax25_cb ax25default;
  82. extern struct ax25_cb *ax25_cb[];
  83. #define NHASH   17
  84.  
  85. #define YES     1
  86. #define NO      0
  87. int  sendframe(struct ax25_cb *, char, char, struct mbuf *);
  88.  
  89. /* In LAPB */
  90. int  lapb_input(struct ax25_cb *, char, struct mbuf *);
  91. void est_link(struct ax25_cb *);
  92. void clr_ex(struct ax25_cb *);
  93. void enq_resp(struct ax25_cb *);
  94. void inv_rex(struct ax25_cb *);
  95. int  frmr(struct ax25_cb *, char, char);
  96. int  sendctl(struct ax25_cb *, char, char);
  97. int  lapb_output(struct ax25_cb *);
  98. void lapbstate(struct ax25_cb *, int);
  99. void ax_incom(struct ax25_cb *, int16);
  100. void ax_session(struct ax25_cb *, int16);
  101. void ax_rx(struct ax25_cb *, int16);
  102. void ax_tx(struct ax25_cb *, int16);
  103. void ax_state(struct ax25_cb *, int, int);
  104. struct ax25_cb *open_ax25(struct ax25 *, int16, void (*)(),
  105.                           void (*)(), void (*)(), struct interface *, char *);
  106.              
  107. /* In LAPBTIME */
  108. void recover(int *);
  109. void send_ack(int *);
  110. void pollthem(int *);
  111. void redundant(int *);
  112. void tx_enq(struct ax25_cb *);
  113.  
  114. /* In LCSUM */
  115. int16 lcsum(int16 *, int16);
  116.